<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
    
        // 将函数 当做 返回值

        function fun() {
            var num = 20;
            num++;
            function foo() {
                console.log('输出：' + num);
            }
            return foo;
        }

        // 当函数 fun 执行时 会将 嵌套在 fun函数里面的 foo函数地址返回 出来 
        //所以 接收 fun函数返回值的 fn 就有了 foo函数的地址
        var fn = fun();

        fn(); //fn 引用了 foo函数的地址， 执行时就相当于 执行 foo函数
        fn();

        // 因为 fun函数 只执行一次， 那么 fun函数中数据将不再变更
        // 那么 通过 返回的 foo 函数可以 利用 作用域链的特性 一直访问 fun函数中 的数据

// 通过一种间接的方式访问函数里面的内容

        // 通过 这种返回 foo函数 去访问 fun函数里面的数据 的方式 叫做： 闭包操作
    </script>
    
</body>
</html>